package org.example.webaiproject05.service.Impl;

import com.github.pagehelper.Page;
import com.github.pagehelper.PageHelper;
import org.example.webaiproject05.Mapper.EmpExprMapper;
import org.example.webaiproject05.Mapper.EmpMapper;
import org.example.webaiproject05.pojo.*;
import org.example.webaiproject05.service.EmpLogService;
import org.example.webaiproject05.service.EmpService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import org.springframework.util.CollectionUtils;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.Arrays;
import java.util.List;

@Service
public class EmpServiceImpl implements EmpService {
    @Autowired
    private EmpMapper empMapper;
    @Autowired
    private EmpExprMapper empExprMapper;
    @Autowired
    private EmpLogService empLogService;
//    @Override
//    public PageResult<Emp> page(Integer page, Integer pageSize) {
//        //调用mapper接口查询
//        Long total = empMapper.count();
//        Integer start = (page-1)*pageSize;
//        List<Emp> rows = empMapper.list(start, pageSize);
//        PageResult<Emp> pageResult = new PageResult<>(total, rows);
//        return pageResult;
//    }
//    @Override
//    public PageResult<Emp> page(Integer page, Integer pageSize,String name, Integer gender, LocalDate begin, LocalDate end) {
//        // 1. 设置分页参数
//        PageHelper.startPage(page, pageSize);
//        // 2. 执行查询
//        List<Emp> emplist = empMapper.list(name, gender, begin, end);
//        // 3. 封装PageResult并返回
//        Page<Emp> p = (Page<Emp>) emplist;
//        return new PageResult<Emp>(p.getTotal(), p.getResult());
//    }
//    服务器接受前端用户发起的HTTP 请求，例如新增员工信息:：接受前端发来的员工信息(json格式)，通过控制层接受参数传输到服务层实现接口，最后调用mapper层来操作mybits实现进而存入mysql数据库中，实现数据的持久化。该系统还实现了分页查询通过Pagehelper设置分页参数，调用mapper接口中的方法将数据放到list集合中，最后将集合返回实现分页查询。
    @Override
    public PageResult<Emp> page(EmpQueryParam  empQueryParam) {
        // 1. 设置分页参数
        PageHelper.startPage(empQueryParam.getPage(), empQueryParam.getPageSize());
        // 2. 执行查询
        List<Emp> emplist = empMapper.list(empQueryParam);
        // 3. 封装PageResult并返回
        Page<Emp> p = (Page<Emp>) emplist;
        return new PageResult<Emp>(p.getTotal(), p.getResult());
    }
    @Transactional(rollbackFor = {Exception.class})
    @Override
    public void save(Emp emp) {


        try {
//        保存员工的基本信息
            emp.setCreateTime(LocalDateTime.now());
            emp.setUpdateTime(LocalDateTime.now());
            empMapper.insert(emp);
//        保存员工的工作经历
            List<EmpExpr> exprList = emp.getExprList();
            if (!CollectionUtils.isEmpty(exprList)) {
                //遍历集合, 为empId赋值
                exprList.forEach(empExpr -> {
                    empExpr.setEmpId(emp.getId());
                });
                empExprMapper.insertBatch(exprList);
            }
        } finally {
            EmpLog empLog = new EmpLog(null,LocalDateTime.now(),"添加员工"+emp);
            empLogService.insertLog(empLog);
        }

    }

    @Override
//    批量删除员工的基本信息
//    删除员工的工作经历信息
    @Transactional(rollbackFor = {Exception.class})
    public void delete(List<Integer> ids) {
        empMapper.deleteByIds(ids);
        empExprMapper.deleteEmpIds(ids);

    }

    @Override
    public Emp getById(Integer id) {
        return empMapper.getById(id);
    }

    @Transactional(rollbackFor = {Exception.class})
    @Override
    public void update(Emp emp) {
        /*-根据员工的Id来修改员工的基本信息*/
        emp.setUpdateTime(LocalDateTime.now());
//        根据ID来更新员工的基本信息
        empMapper.updateById(emp);
//        根据员工的Id先删除原先的工作经历
        empExprMapper.deleteEmpIds(Arrays.asList(emp.getId()));
//        添加新的工作经历
        List<EmpExpr> exprList = emp.getExprList();
        if (!CollectionUtils.isEmpty(exprList)) {
            exprList.forEach(empExpr -> {
                empExpr.setEmpId(emp.getId());
                empExprMapper.insertBatch(exprList);
            });
        }
    }


}


